package skladowisko;

import skladowisko.dictonaries.StatusObiektu;
import skladowisko.dictonaries.StatusZadania;
import skladowisko.dictonaries.StopienZaladunku;
import skladowisko.transport.TransportPrzychodzacy;
import skladowisko.transport.TransportWychodzacy;

/**
 *
 * @author Krzysiek
 */
public class Kontener
{
    private static int nextID = 1;
    private int id;

    private TypObiektuSkladowanego typObiektu = TypObiektuSkladowanego.KONTENER;
    private String numerRozpoznawczy;
    private String nazwa;

    private Miejsce miejsce;
    
    private ParametryFizyczne pFizyczne;

    private TransportPrzychodzacy transportDostarczenie = null;

    private ParametryPrzeznaczenie parametryPrzeznaczenie = null;
    private TransportWychodzacy transportPrzeznaczenie = null;

    private Armator armator = new Armator();
    private StatusObiektu status = StatusObiektu.NIEZNANY;
    
    private HistoriaObiektu historia = new HistoriaObiektu(this);
    //**************************************************************************
    public Kontener(ParametryFizyczne pFizyczne)
    {
        this.id = nextID;
        nextID++;
        
        this.pFizyczne = pFizyczne;        
    }
    //**************************************************************************
    @Override
    public String toString()
    {
       StringBuilder sb = new StringBuilder();
       sb.append("Kontener: ").append(this.id).append("\n");
       sb.append("Numer rozpoznawczy: ").append(this.numerRozpoznawczy).append("\n");
       
       sb.append("Miejsc skladowania: ");
       if(this.miejsce != null)
           sb.append(miejsce.toString()).append("\n");
       else
           sb.append("nie jest obecnie skladowany");               
       
       return sb.toString();
    }

   //**************************************************************************
   public void skladuj(Miejsce miejsce)
   {
        miejsce.poloz(this);
   }
   //**************************************************************************
   public Kontener sciagnij()
   {
        if(this.miejsce != null && miejsce.getKontener().equals(this))
        {
            miejsce.sciagnij();
            return this;
        }
        return null;
   }
   //**************************************************************************
    @Override
    @SuppressWarnings("EqualsWhichDoesntCheckParameterClass")
    public boolean equals(Object o)
    {
        if(!(o instanceof Kontener))
            return false;
        Kontener tmp = (Kontener)o;
        if(this.id == tmp.id)
            return true;
        return false;
    }
    //**************************************************************************
    @Override
    public int hashCode()
    {
        int hash = 3;
        return hash;
    }
    //**************************************************************************
    public boolean isPusty()
    {
       if(getpFizyczne().getStopienZaladunku() == StopienZaladunku.PUSTY)
           return true;
       return false;
    }
    //**************************************************************************
    public boolean dodajDoHistorii(ZadaniePrzeladunkowe zadanie)
    {
       if(zadanie.getStatus() != StatusZadania.ZAKONCZONE)
           return false;

       this.historia.dodajZadanie(zadanie);

       return true;
    }
   //**************************************************************************
    public void pokazHistorie()
    {
        this.getHistoria().pokazKonsole();
    }
    //**************************************************************************
    public int getId()
    {
        return id;
    }
    //**************************************************************************
    public void setId(int id)
    {
        this.id = id;
    }
    //**************************************************************************
    public String getNumerRozpoznawczy()
    {
        return numerRozpoznawczy;
    }
    //**************************************************************************
    public void setNumerRozpoznawczy(String numerRozpoznawczy)
    {
        this.numerRozpoznawczy = numerRozpoznawczy;
    }
    //**************************************************************************
    public String getNazwa()
    {
        return nazwa;
    }
    //**************************************************************************
    public void setNazwa(String nazwa)
    {
        this.nazwa = nazwa;
    }
    //**************************************************************************
    public ParametryFizyczne getpFizyczne()
    {
        return pFizyczne;
    }
    //**************************************************************************
    public void setpFizyczne(ParametryFizyczne pFizyczne)
    {
        this.pFizyczne = pFizyczne;
    }
    //**************************************************************************
    public StatusObiektu getStatus()
    {
        return status;
    }
    //**************************************************************************
    public void setStatus(StatusObiektu status)
    {
        this.status = status;
    }
    //**************************************************************************
    
    public HistoriaObiektu getHistoria()
    {
        return historia;
    }
    //**************************************************************************
    public void setHistoria(HistoriaObiektu historia)
    {
        this.historia = historia;
    }
    //**************************************************************************
    public Miejsce getMiejsce()
    {
        return miejsce;
    }
    //**************************************************************************
    public void setMiejsce(Miejsce miejsce)
    {
        this.miejsce = miejsce;
    }
    //**************************************************************************
    public Armator getArmator()
    {
        return armator;
    }
    //**************************************************************************
    public void setArmator(Armator armator)
    {
        this.armator = armator;
    }
    //**************************************************************************
    public TransportPrzychodzacy getTransportDostarczenie()
    {
        return transportDostarczenie;
    }
    //**************************************************************************
    public void setTransportDostarczenie(TransportPrzychodzacy transportDostarczenie)
    {
        this.transportDostarczenie = transportDostarczenie;
    }
    //**************************************************************************
    public TransportWychodzacy getTransportPrzeznaczenie()
    {
        return transportPrzeznaczenie;
    }
    //**************************************************************************
    public void setTransportPrzeznaczenie(TransportWychodzacy transportPrzeznaczenie)
    {
        this.transportPrzeznaczenie = transportPrzeznaczenie;
    }

    /**
     * @return the parametryPrzeznaczenie
     */
    public ParametryPrzeznaczenie getParametryPrzeznaczenie() {
        return parametryPrzeznaczenie;
    }

    /**
     * @param parametryPrzeznaczenie the parametryPrzeznaczenie to set
     */
    public void setParametryPrzeznaczenie(ParametryPrzeznaczenie parametryPrzeznaczenie) {
        this.parametryPrzeznaczenie = parametryPrzeznaczenie;
    }
    //**************************************************************************
}

